// ABC413G V1 深搜方案
#include <bits/stdc++.h>
using namespace std;
int n, m, k;
vector<int> lef, bot;        // 存储底部和左侧的障碍物坐标
set<pair<int, int>> zhangai; // 存储所有障碍物坐标
// 8个方向的移动增量
int dx[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};

// 深度优先搜索函数，判断是否能从(x,y)到达顶部或右侧
bool dfs(int x, int y) {
  if (zhangai.find({x, y}) == zhangai.end()) // 如果当前位置不是障碍物
    return false;
  zhangai.erase({x, y}); // 访问过的障碍物移除，避免重复访问
  if (x == 1 || y == m)  // 如果到达顶部或右侧边界
    return true;
  // 尝试8个方向
  for (int d = 0; d < 8; d++) {
    int xx = x + dx[d], yy = y + dy[d];       // 计算新位置
    if (xx < 1 || xx > n || yy < 1 || yy > m) // 超出边界则跳过
      continue;
    if (dfs(xx, yy)) // 递归搜索
      return true;
  }
  return false;
}

signed main() {
  cin >> n >> m >> k; // 读取网格大小和障碍物数量
  for (int i = 1, x, y; i <= k; i++) {
    cin >> x >> y; // 读取每个障碍物的坐标
    zhangai.insert({x, y});
    if (x == n) // 如果是底部障碍物
      bot.push_back(y);
    if (y == 1) // 如果是左侧障碍物
      lef.push_back(x);
  }
  /*

  检查在一个网格中，是否存在从底部或左侧的障碍物出发，
  能够通过相邻的障碍物（包括对角线相邻）到达顶部或右侧的路径。
  如果存在这样的路径，输出"No"，否则输出"Yes"。

  */

  // 检查底部障碍物是否能到达顶部或右侧
  for (int y : bot)
    if (dfs(n, y))
      cout << "No\n", exit(0); // 如果能到达，输出No并退出

  // 检查从左侧障碍物是否能到达顶部或右侧
  for (int x : lef)
    if (dfs(x, 1))
      cout << "No\n", exit(0);

  cout << "Yes\n"; // 所有路径检查完毕，输出Yes
  return 0;
}